<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>圣杯布局</title>
</head>
<body>
  <header>头部</header>
  <!-- 如果不添加 div 那么会产生浮动塌陷 -->
  <div class="clear-fix wrapper">
    <div class="content">
      主区域
    </div>
    <div class="left">
      左区域
    </div>
    <div class="right">
      右区域
    </div>
  </div>
  <footer>尾部</footer>
</body>
<style>

  header {
    background-color: brown;
    height: 100px;
  }
  /* wrapper 用于将 content 控制在中间部分，同时防止 div 溢出屏幕外 */
  .wrapper {
    padding: 0 100px;
  }
  .content {
    background-color: burlywood;
    width: 100%;
  }
  .left {
    background-color: cadetblue;
    /* position: relative 用于防止将其它元素覆盖 */
    position: relative;
    left: -100px;
    /* margin-left: -100% 用于将元素置于左边 */
    /* 这个 100% 是元素要跨过的那个元素所占的大小 */
    margin-left: -100%;
  }
  .right {
    background-color: chartreuse;
    /* margin-left: 100px 用于防止元素跨行 */
    /* 这里的 100px 指的是自己的宽度 */
    margin-left: -100px;

    position: relative;
    right: -100px;
  }
  footer {
    background-color: chocolate;
    height: 100px;
  }

  .left, .right {
    width: 100px;
  }

  .content, .left, .right {
    height: 100px;
    float: left;    
  }

  header, footer, .content, .left, .right {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 30px;
  }

  .clear-fix::after {
    content: "";
    display: block;
    clear: both;
  }
</style>
</html>